home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Graphics / Misc / Wood.0.72 / Sources / IPFlyPanel.m < prev    next >
Encoding:
Text File  |  1995-08-02  |  3.0 KB  |  146 lines

  1.  
  2. #import "IPFlyPanel.h"
  3.  
  4. @interface View (IPFlyHack)
  5.  
  6. - getIconifyButton;
  7.  
  8. @end
  9.  
  10.  
  11. @interface IPFlyPanel (IPFlyPanelPrivateMethods)
  12.  
  13. - _syncIconifyButton;        
  14.  
  15. @end
  16.  
  17. static const char *PANELPREFIX = "IPFLYPANEL";
  18.  
  19. @implementation IPFlyPanel
  20.  
  21.  
  22. - initContent:(const NXRect *)contentRect
  23.         style:(int)aStyle
  24.       backing:(int)bufferingType
  25.    buttonMask:(int)mask
  26.         defer:(BOOL)flag
  27. {
  28.     [super initContent:contentRect
  29.                  style:aStyle
  30.                backing:bufferingType
  31.             buttonMask:mask
  32.                   defer:flag];
  33.                  
  34.     if([_borderView respondsTo:@selector(getIconifyButton)] &&
  35.          [_borderView getIconifyButton] != nil){
  36.         [[_borderView getIconifyButton] setType:NX_TOGGLE];
  37.         [[_borderView getIconifyButton] setIcon:"fly.tiff"];
  38.         [[_borderView getIconifyButton] setAltIcon:"flyH.tiff"];
  39.     }
  40.     _floatingName = NULL;
  41.     return self;
  42. }
  43.  
  44. - free
  45. {
  46.     NX_FREE(_floatingName);
  47.     return [super free];
  48. }
  49.  
  50. - _syncIconifyButton
  51. {
  52.     if ( [_borderView respondsTo:@selector(getIconifyButton)] &&
  53.          [_borderView getIconifyButton] != nil )
  54.     {
  55.         [[_borderView getIconifyButton] setState:[self isFloatingPanel]];
  56.         [[_borderView getIconifyButton] update];
  57.     }
  58.     return self;
  59. }
  60.  
  61. - miniaturize:sender
  62. {
  63.     [super setFloatingPanel:![self isFloatingPanel]];
  64.     if(_floatingName != NULL)
  65.         [self saveFloatingUsingName:_floatingName];
  66.     return self;
  67. }
  68.  
  69. - setFloatingPanel:(BOOL)flag
  70. {
  71.     [super setFloatingPanel:flag];
  72.     [self _syncIconifyButton];
  73.     if(_floatingName != NULL)
  74.         [self saveFloatingUsingName:_floatingName];
  75.     return self;
  76. }
  77.  
  78. - (BOOL)setFloatingAutosaveName:(const char *)name
  79. {
  80.     if(name != NULL){
  81.         if(_floatingName)
  82.             _floatingName = (char *)NXZoneRealloc([self zone], _floatingName, strlen(name) + 1);
  83.         else
  84.             _floatingName = (char *)NXZoneMalloc([self zone], strlen(name) + 1);
  85.         strcpy(_floatingName, name);
  86.         if(![self setFloatingUsingName:_floatingName])
  87.             [self saveFloatingUsingName:_floatingName];
  88.     } else {
  89.         if(_floatingName)
  90.             NX_FREE(_floatingName);
  91.         _floatingName = NULL;
  92.     }    
  93.     return YES;
  94. }
  95.  
  96.  
  97. - (BOOL)setFloatingAutosaveLikeFrameName
  98. {
  99.     return [self setFloatingAutosaveName:[self frameAutosaveName]];
  100. }
  101.  
  102.  
  103. - (const char *)floatingAutosaveName
  104. {
  105.     return _floatingName;
  106. }
  107.  
  108. - (void)saveFloatingUsingName:(const char *)name
  109. {
  110.     char *fname;
  111.  
  112.     if(name != NULL){
  113.         fname = (char *)NXZoneMalloc([self zone], strlen(name) + strlen(PANELPREFIX) + 1);
  114.         strcpy(fname, PANELPREFIX);
  115.         strcat(fname, name);
  116.         if([self isFloatingPanel])
  117.             NXWriteDefault([NXApp appName], fname, "1");
  118.         else
  119.             NXWriteDefault([NXApp appName], fname, "0");
  120.         NX_FREE(fname);
  121.     }
  122. }
  123.  
  124.  
  125. - (BOOL)setFloatingUsingName:(const char *)name
  126. {
  127.     const char    *state;
  128.     char *fname;
  129.     
  130.     if(name != NULL){
  131.         fname = (char *)NXZoneMalloc([self zone], strlen(name) + strlen(PANELPREFIX) + 1);
  132.         strcpy(fname, PANELPREFIX);
  133.         strcat(fname, name);
  134.         state = NXGetDefaultValue([NXApp appName], fname);
  135.         NX_FREE(fname);
  136.         if(state != NULL){
  137.             [super setFloatingPanel:atoi( state )];
  138.             [self _syncIconifyButton];
  139.             return YES;
  140.         }
  141.     }
  142.     return NO;
  143. }
  144.  
  145. @end
  146.